<?php
class ManageContentCategoryForm extends Form{
	private $cachefile='ManageContentCategory';
	
	function __construct(){				
		Form::Form('ManageContentCategoryForm');
		$this->link_css('style/sphinx_search.css');
		require ( "./includes/sphinxapi.class.php" );
	}
	
	function on_submit(){
		$src_catid 		= (int)Url::get('searchedCategory');
		
		$src_l1_catid 	= 0;
		$src_l2_catid 	= 0;
		//$src_l3_catid 	= 0;
		
		$des_l1_catid	= 0;
		$des_l2_catid	= 0;
		$des_l3_catid	= 0;
		
		$des_catid  	= (int)Url::get('desCategories');
		$des_prop		= (int)Url::get('desProperties');
		
		//$searchedKeywords = AZLib::getParam('searchedKeywords');
		$itemids 			= AZLib::getParam('itemids');
		$varMoveItem 		= AZLib::getParam('hidMoveItem');
		
		if($src_catid && $des_catid && ($varMoveItem == 'MoveItem')){//Nếu có DM nguồn & DM đích
			$t_update 		= 0;
				
			############################################
			//KTra DM nguồn
			$src_cat = DB::select("category_bk","id=$src_catid");
			
			if($src_cat){
				if($src_cat && $src_cat['parent_id']){//DM cấp 2
					$src_l1_catid = $src_cat['parent_id'];
					$src_l2_catid = $src_catid;
					
					
					/*$src_cat_parent = DB::select("category_bk","id={$src_cat['id']}");
			
					if(!$src_cat_parent || ($src_cat_parent && $src_cat_parent['parent_id'])){//DM cấp 3
						$src_l1_catid = $src_cat_parent['parent_id'];
						$src_l2_catid = $src_cat['parent_id'];
						$src_l3_catid = $src_catid;
					}
					else{
						$src_l1_catid = $src_cat['parent_id'];
						$src_l2_catid = $src_catid;
					}*/
				}
				else{
					$src_l1_catid = $src_catid;
				}
			}
			else{
				return;
			}
			############################################
			
			############################################
			//KTra DM đích
			$cat = DB::select('category','id = '.$des_catid);// Xét danh mục hiện tại
			
			if($cat){	
				if($cat['parent_id'] == 0){ // Là danh mục cấp 1
					$des_l1_catid = $cat['id'];
				}
				else{
					$parent_cat = DB::select('category','id = '.$cat['parent_id']);
					
					if($parent_cat['parent_id'] == 0){ // Là danh mục cấp 2
						$des_l1_catid = $parent_cat['id'];
						$des_l2_catid = $des_catid;
					}
					else{ // Là danh mục cấp 3
						$des_l1_catid = $parent_cat['parent_id'];
						$des_l2_catid = $parent_cat['id'];
						$des_l3_catid = $des_catid;
					}
				}
			}
			else{
				return;
			}
			############################################
			
			if($itemids!=''){// Nếu tìm kiếm có từ khóa
				$count 			= 0;
				$itemIDs 	 	= "";
				$item_id_arr 	= explode(",",$itemids);
				
				
				foreach($item_id_arr as $item_id ){	
					$itemIDs .= ($itemIDs!=''?',':'').$item_id;	
					$count++;
					
					if($count == 1000){ // Cứ 1000 item thì cập nhật một lần
						if($des_l3_catid){
							$sql = 'UPDATE item SET category_id='.$des_l3_catid.',level_1_catid='.$des_l1_catid.',level_2_catid='.$des_l2_catid;
						}
						elseif($des_l2_catid){
							$sql = 'UPDATE item SET category_id='.$des_l2_catid.',level_1_catid='.$des_l1_catid.',level_2_catid='.$des_l2_catid;
						}
						else{
							$sql = 'UPDATE item SET category_id='.$des_l1_catid.',level_1_catid='.$des_l1_catid.',level_2_catid=0';
						}
						
						if($des_prop){
							$sql .= ',pcatid='.(int)$des_prop;
						}
						
						$sql.=' WHERE id IN('.$itemIDs.')';
						
						if($src_l2_catid){ // Nếu tìm kiếm theo từ khóa trong danh mục cấp 2
							$sql .= ' AND bk_category_id = ' . $src_l2_catid;
						}
						elseif($src_l1_catid){ // Nếu tìm kiếm theo từ khóa trong danh mục cấp 2
							$sql .= ' AND bk_level_1_catid = ' . $src_l1_catid;
						}
						
						if($des_catid){
							$sql .= ' AND category_id != ' . $des_catid;
						}
						
						DB::Query($sql);
						
						$itemIDs = '';
						$count   = 0;
						$t_update+= DB::affected_rows();
					}
				}
				
				if($itemIDs != ''){// Vẫn còn item cần cập nhật, số lượng những item cuối cùng này < 1000 nên không được cập nhật trong vòng lặp trên
					if($des_l3_catid){
						$sql = 'UPDATE item SET category_id='.$des_l3_catid.',level_1_catid='.$des_l1_catid.',level_2_catid='.$des_l2_catid;
					}
					elseif($des_l2_catid){
						$sql = 'UPDATE item SET category_id='.$des_l2_catid.',level_1_catid='.$des_l1_catid.',level_2_catid='.$des_l2_catid;
					}
					else{
						$sql = 'UPDATE item SET category_id='.$des_l1_catid.',level_1_catid='.$des_l1_catid.',level_2_catid=0';
					}
					
					if($des_prop){
						$sql .= ',pcatid='.(int)$des_prop;
					}
					
					$sql.=' WHERE id IN('.$itemIDs.')';
					
					if($src_l2_catid){ // Nếu tìm kiếm theo từ khóa trong danh mục cấp 2
						$sql .= ' AND bk_category_id = ' . $src_l2_catid;
					}
					elseif($src_l1_catid){ // Nếu tìm kiếm theo từ khóa trong danh mục cấp 2
						$sql .= ' AND bk_level_1_catid = ' . $src_l1_catid;
					}
					
					if($des_catid){
						$sql .= ' AND category_id != ' . $des_catid;
					}
					
					DB::Query($sql);
					$t_update+= DB::affected_rows();
				}
			}
			else{// Nếu tìm kiếm item trong danh mục, không sử dụng từ khóa
				if($src_l2_catid){ 
					$sql = 'SELECT count(*) AS total_row FROM item WHERE bk_category_id='.$src_l2_catid;
				}
				elseif($src_l1_catid){
					$sql = 'SELECT count(*) AS total_row FROM item WHERE bk_level_1_catid='.$src_l1_catid;
				}
				
				if($des_catid){
					$sql .= ' AND category_id != ' . $des_catid;
				}
				
				
				$re = DB::Query($sql);
				
				if($re){
					$row = mysql_fetch_assoc($re);
					$total = $row['total_row'];
				}
				else{
					$total = 0;
				}
					
				while($total){
					//DM đích
					if($des_l3_catid){
						$sql = 'UPDATE item SET category_id='.$des_l3_catid.',level_1_catid='.$des_l1_catid.',level_2_catid='.$des_l2_catid;
					}
					elseif($des_l2_catid){
						$sql = 'UPDATE item SET category_id='.$des_l2_catid.',level_1_catid='.$des_l1_catid.',level_2_catid='.$des_l2_catid;
					}
					else{
						$sql = 'UPDATE item SET category_id='.$des_l1_catid.',level_1_catid='.$des_l1_catid.',level_2_catid=0';
					}
					
					if($des_prop){
						$sql .= ',pcatid='.(int)$des_prop;
					}
						
					//DM nguồn
					if($src_l2_catid){ // Nếu tìm kiếm theo từ khóa trong danh mục cấp 2
						$sql .= ' WHERE bk_category_id = ' . $src_l2_catid;
					}
					elseif($src_l1_catid){ // Nếu tìm kiếm theo từ khóa trong danh mục cấp 2
						$sql .= ' WHERE bk_level_1_catid = ' . $src_l1_catid;
					}
					if($des_catid){
						$sql .= ' AND category_id != ' . $des_catid;
					}
					
					$sql .= ' LIMIT 1000';
					
					$re = DB::Query($sql);
					$t_update+= DB::affected_rows();
					
					if($re && $total>1000){
						if($src_l2_catid){ 
							$sql = 'SELECT count(*) AS total_row FROM item WHERE bk_category_id='.$src_l2_catid;
						}
						elseif($src_l1_catid){
							$sql = 'SELECT count(*) AS total_row FROM item WHERE bk_level_1_catid='.$src_l1_catid;
						}
						
						if($des_catid){
							$sql .= ' AND category_id != ' . $des_catid;
						}
						
						$re = DB::Query($sql);
						
						if($re){
							$row 	= mysql_fetch_assoc($re);
							$total 	= $row['total_row'];
						}
						else{
							$total = 0;
						}
					}
					else{
						$total = 0;
					}
				}
			}
			
			$this->setFormSucces('',"Đã chuyển $t_update tin!");
		}
	}
	
	function draw(){
		global $display;
		$keywords  		= AZLib::getParam('searchKeyword');
		
		$src_catid 		= (int)Url::get('sourceCategories');
		$src_l1_catid 	= 0;
		$src_l2_catid 	= 0;
		//$src_l3_catid 	= 0;
		
		if($src_catid){//Kiểm tra danh mục nguồn
			$src_cat = DB::select("category_bk","id=$src_catid");
			
			if($src_cat){
				if($src_cat && $src_cat['parent_id']){//DM cấp 2
					$src_l1_catid = $src_cat['parent_id'];
					$src_l2_catid = $src_catid;
					
					/*
					$src_cat_parent = DB::select("category_bk","id={$src_cat['id']}");
			
					if(!$src_cat_parent || ($src_cat_parent && $src_cat_parent['parent_id'])){//DM cấp 3
						$src_l1_catid = $src_cat_parent['parent_id'];
						$src_l2_catid = $src_cat['parent_id'];
						$src_l3_catid = $src_catid;
					}
					else{
						$src_l1_catid = $src_cat['parent_id'];
						$src_l2_catid = $src_catid;
					}
					*/
				}
				else{
					$src_l1_catid = $src_catid;
				}
			}
		}
		
		$des_catid  	= (int)AZLib::getParam('desCategories');
		
		$search_result	= false;
		$items			= array();
		$total = 0;
		
		if($keywords){//Nếu tìm theo từ khóa
			$q 		= $keywords;
			$mode 	= SPH_MATCH_ALL;
			//Init config
			$host 	= SPHINX_SERVER;
			$port 	= SPHINX_PORT;
			$index 	= SPHINX_INDEX;	
			$ranker = SPH_RANK_PROXIMITY_BM25;
			
			$cl = new SphinxClient();
			$cl->SetServer( $host, $port );
			$cl->SetConnectTimeout( 1 );
			$cl->_limit = 50000;
			$cl->_maxmatches = 50000;
			$cl->SetWeights( array( 100, 1 ) );
			$cl->SetMatchMode( $mode );
			
			if($src_l2_catid){
				$cl->SetFilter('category_id', array($src_catid) );
			}
			elseif ($src_l1_catid){
				$cl->SetFilter('level_1_catid', array($src_catid) );
			}
			
			//$cl->SetLimits( $offset , $limit, 10000 );
			$cl->SetRankingMode( $ranker );
			$cl->SetArrayResult( true );
			
			$res = $cl->Query( $q, $index );
			
			
			if($res && isset($res["matches"])){	
				if( is_array($res["matches"]) ){
					$itemIDs = '';
					$count = 0;
					foreach( $res["matches"] as $results ){	
						$itemIDs .= ($itemIDs!=''?',':'').$results['id'];	
					}
					
					if($itemIDs != ''){//Đếm lại số bản ghi chính xác
						$sql = 'SELECT count(*) AS totalItem FROM item WHERE id IN('.$itemIDs.')';
						
						if($src_l2_catid){ // Nếu tìm kiếm theo từ khóa trong danh mục nào đó
							$sql .= ' AND bk_category_id = ' . $src_l2_catid;
						}
						elseif($src_l1_catid){
							$sql .= ' AND bk_level_1_catid = ' . $src_l1_catid;
						}
						
						if($des_catid){
							$sql .= ' AND category_id != ' . $des_catid;
						}
						
						$re = DB::Query($sql);
						if($re){
							$row 	= mysql_fetch_assoc($re);
							$total += (int)$row['totalItem'];
						}
						$display->add('itemids', $itemIDs);
					}
				}
			}
		}
		elseif($src_catid){// Nếu giới hạn theo danh mục
			$sql = "SELECT count(*) AS itemTotal FROM item";
			
			if($src_l2_catid) // Nếu tìm kiếm theo từ khóa trong danh mục nào đó
			{
				$sql .= ' WHERE bk_category_id = ' . $src_l2_catid;
			}
			elseif($src_l1_catid){
				$sql .= ' WHERE bk_level_1_catid = ' . $src_l1_catid;
			}
			
			$re	=	DB::query($sql);
			
			if($re){
				$row 	= mysql_fetch_assoc($re);
				$total 	= $row['itemTotal'];
			}
		}
		
		$this->beginForm();	
		
		//Build source categories list
		$cat_search_name = '';
		$re=DB::query("SELECT id,name,parent_id ,position,status FROM category_bk ORDER BY parent_id,position");
				
		$all_cats=array();
		$all_subcats=array();
				
		if($re){
			while($cat = mysql_fetch_assoc($re)){
				if($cat['parent_id']){//Là danh mục cấp 2
					if(isset($all_cats[$cat['parent_id']]) && $all_cats[$cat['parent_id']]['parent_id'] == 0){//Là danh mục cấp 2
						$all_subcats[$cat['parent_id']][$cat['id']] = $cat;
					}
				}
				else{					
					if(!isset($all_subcats[$cat['id']])){
						$all_subcats[$cat['id']] = array();
					}
				}
				$all_cats[$cat['id']]=$cat;
			}
		}
		
		$all_top_cat = array();		
		$all_top_cat[0] = 'Tất cả các danh mục';
		foreach($all_subcats as $topid=>$subcats){
			if($src_catid &&($src_catid == $topid)) $cat_search_name = $all_cats[$topid]['name'];
			if($all_cats[$topid]['status'] == 'HIDE')
			{
				$all_cats[$topid]['name'].= ' (ẨN)';
			}
			$all_top_cat[$topid]=$all_cats[$topid]['name'];
			
			foreach ($subcats as $subcat){
				if($src_catid &&($src_catid == $subcat['id'])) $cat_search_name = $subcat['name'];
				if($subcat['status'] == 'HIDE')
				{
					$subcat['name'].= ' (ẨN)';
				}
				$all_top_cat[$subcat['id']] = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;".$subcat['name'];
			}
		}
		//print_r($all_top_cat);
		$display->add('msg', $this->showFormSuccesMessages(1));
		$display->add('sourceCategories', $all_top_cat);
		
		//Build destination categories list
		$re=DB::query("SELECT id,name,parent_id,status,position FROM category ORDER BY parent_id,position");
				
		$all_cats		=array();
		$all_subcats	=array();
		
		$level1_cats	 = array();
		$level2_cats 	= array();
		$level3_cats 	= array();
		
		if($re){
			while($cat = mysql_fetch_assoc($re)){
				if($cat['parent_id']){//Là danh mục cấp 2 hoặc 3
					if(isset($all_cats[$cat['parent_id']]) && $all_cats[$cat['parent_id']]['parent_id'] == 0){//Là danh mục cấp 2
						$all_subcats[$cat['parent_id']][$cat['id']] = $cat;
						
						$cat['max'] 	= 0;
						
						if($cat['position'] > $level1_cats[$cat['parent_id']]['max']){
							 $level1_cats[$cat['parent_id']]['max'] = $cat['position'];
						}
						
						$level2_cats[$cat['id']] = $cat;
					}
					else{//là danh mục cấp 3
						if($cat['position'] > $level2_cats[$cat['parent_id']]['max']){
							 $level2_cats[$cat['parent_id']]['max'] = $cat['position'];
						}
						$level3_cats[$all_cats[$cat['parent_id']]['parent_id']][$cat['parent_id']][$cat['id']] = $cat;
					}
				}
				else{
					$cat['max'] 				= 0;
					$level1_cats[$cat['id']] 	= $cat;
					
					if(!isset($all_subcats[$cat['id']])){
						$all_subcats[$cat['id']] = array();
					}
				}
				$all_cats[$cat['id']]=$cat;
			}
		}
		
		$all_top_cat = array();
		$categories = array();
		foreach($all_subcats as $topid=>$subcats){
			if($all_cats[$topid]['status'] == 'HIDE')
			{
				$all_cats[$topid]['name'].= ' (ẨN)';
			}
			$categories[$topid] = $all_cats[$topid];
			$all_top_cat[$topid]=$all_cats[$topid]['name'];
			
			foreach ($subcats as $subcat){
				if($subcat['status'] == 'HIDE')
				{	
					$subcat['name'].= ' (ẨN)';
				}
				$all_top_cat[$subcat['id']] = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;".$subcat['name'];
				$categories[$subcat['id']] = $subcat;
				if(isset($level2_cats[$subcat['id']]) && $level2_cats[$subcat['id']]['max']){
					$subcatsl3 = $level3_cats[$subcat['parent_id']][$subcat['id']];
					foreach ($subcatsl3 as $subcatl3){
						if($subcatl3['status'] == 'HIDE')
						{	
							$subcatl3['name'].= ' (ẨN)';
						}
						$all_top_cat[$subcatl3['id']] = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;".$subcatl3['name'];		
						$subcatl3['parent_id'] .= ','.$subcat['parent_id'];
						$categories[$subcatl3['id']] = $subcatl3;
					}
				}
			}
		}
		$display->add('desCategories', $all_top_cat);
		$display->add('desJSONCategories', json_encode($categories));
		
		$display->add('desProperties',json_encode(CGlobal::$allPCats));		
		$display->add("allrecord",$total);
		
		$display->add('keywords',$keywords);
		$display->add('cat_search_id',$src_catid);
		$display->add('cat_search_name',$cat_search_name);
		$display->add('category_id',$des_catid);
		$display->output("ManageContentCategory");
		$this->endForm();
	}
}
?>